Projectile 是 Emacs 常用的專案管理工具,它可以從 Git 的設定中,知道哪些檔案屬於這個專案需要編輯的,哪些是三方函式庫,不需要放入查詢中,它可以跟 Grep/AG 結合來搜尋專案中的特定函數或變數,可以取代這些函數或變數的名稱,可以很快的轉換到另一個專案... 等等
(use-package projectile
:ensure t
:bind-keymap ("\C-c p" . projectile-command-map)
:config
(projectile-mode t)
(setq projectile-completion-system 'ivy)
(use-package counsel-projectile
:ensure t)
)
(use-package ag
:ensure t)
安裝時設定 Ctrl-c p
為啟動 projectile 熱鍵,預設是 Ctrl-c Ctrl-p
是依據 Emacs 的熱鍵設定規範,但我用習慣 Ctrl-c p
來啟動,這個可以看個人喜好設定,我們設定跟 projectile 配合的介面為 ivy,如果你使用 ido 或者 helm 它也可以支援,看個人喜好,順便安裝 counsel-projectile
我建議同時也安裝 the_silver_searcher
這個工具在系統端,在 Emacs 安裝 ag 這個套件來做快速搜尋,等一下使用說明會提到
可以用 Ctrl-c p ?
來看所有有關指令
使用 Ctrl-c p p
來切換專案,還沒加入清單的專案只要開過裡面的檔案一次,就會紀錄下來
使用 Ctrl-c p f
來切換開啟專案中的檔案,會排除 .gitignore 下的部分,例如
它就不會開啟 node_modules 下的檔案
可以使用 Grep
Ctrl-c p s g
或者 ag
Ctrl-c p s s
,差別在於用 Grep
不會排除 .gitignore 的部分,例如搜尋 body
而使用 ag
會排除,例如
在 *grep* *ag search* 緩衝區,使用 n
或是 p
來移動符合的搜尋結果,按 enter 來切換上面緩衝區的相關內容及位置
要使用 grep
或 ag
的情境,端看是否需要包含 .gitignore 的部分
ag
在 Emacs 下也可以單獨使用,不一定要在 projectile 下,使用 Meta-x ag
輸入要搜尋字串
接著輸入要搜尋的目錄
不一定在 projectile 的專案下,也是可以使用
但在 projectile 下,可以限制搜尋的目標
有些程式語言,像是 C/C++ 有表頭檔 (header) 跟實作檔,使用 Ctrl-c p a
(alternative) 可以馬上互相切換,如
使用 Ctrl-c p T
來切換實作檔跟測試檔
使用 Ctrl-c p r
來尋找取代變數或函式
建立 build 目錄,使用 Ctrl-c p c
,第一次編譯 cd build && cmake ..
,第二次編譯 cmake --build build